আরএক্সজাভা (RxJava) তে ডেটা স্ট্রিম পরিচালনার সময় বিভিন্ন ধরনের এরর (Error) ঘটতে পারে। এরর হ্যান্ডলিং একটি গুরুত্বপূর্ণ বিষয়, যা আপনাকে কার্যকরী ও স্থিতিশীল অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে। RxJava তে এরর হ্যান্ডলিং করার জন্য বেশ কিছু অপারেশন এবং কৌশল রয়েছে, যা আমরা উদাহরণের মাধ্যমে ব্যাখ্যা করব।
RxJava তে Error Handling এর প্রধান কৌশলসমূহ
1. onError Callback
onError হল একটি কলব্যাক যা যখন কোনো এরর ঘটে তখন ট্রিগার হয়। আপনি এই কলব্যাকের মাধ্যমে এরর হ্যান্ডলিং করতে পারেন। এটি Observable এর মধ্যে ঘটে এমন কোনো ব্যতিক্রম বা ত্রুটি (exception) ক্যাচ (catch) করতে ব্যবহৃত হয়।
2. onErrorReturn
onErrorReturn অপারেশনটি ব্যবহার করে, আপনি একটি বিকল্প মান প্রদান করতে পারেন যখন কোনো এরর ঘটে। এটি Observable এ যদি কোনো এরর ঘটে, তাহলে ডিফল্ট মান ফেরত দেয়।
3. onErrorResumeNext
onErrorResumeNext অপারেশনটি তখন ব্যবহার হয় যখন একটি Observable তে এরর ঘটে, এবং আপনি এটি এড়িয়ে অন্য একটি Observable থেকে ডেটা নেওয়ার সিদ্ধান্ত নেন।
উদাহরণ সহ Error Handling
এখানে একটি উদাহরণ দেওয়া হলো যেখানে আমরা RxJava তে এরর হ্যান্ডলিং করি:
import io.reactivex.rxjava3.core.Observable;
public class RxJavaErrorHandlingExample {
public static void main(String[] args) {
// একটি Observable তৈরি করা হচ্ছে যা একটি ভুল (Exception) তৈরি করবে
Observable<Integer> numbers = Observable.create(emitter -> {
emitter.onNext(1);
emitter.onNext(2);
emitter.onError(new RuntimeException("Something went wrong!"));
emitter.onNext(3); // এই অংশটি কখনও execute হবে না কারণ এরর হয়ে গেছে
});
// Error Handling with onErrorReturn
numbers
.onErrorReturn(throwable -> {
System.out.println("Error occurred: " + throwable.getMessage());
return -1; // error হলে -1 ফেরত দিবে
})
.subscribe(
item -> System.out.println("Item: " + item),
throwable -> System.out.println("Error: " + throwable), // এই অংশটি এখন আর কাজ করবে না
() -> System.out.println("Completed!")
);
}
}
এই উদাহরণটির ব্যাখ্যা
- প্রথমে একটি
Observableতৈরি করা হয়েছে যা প্রথম দুটি ভ্যালু প্রেরণ করবে (onNext) এবং তারপরে একটিRuntimeExceptionঘটাবে (onError), এর ফলে পরবর্তীonNextকলটি কার্যকরী হবে না। onErrorReturnব্যবহার করে, যদি কোনো এরর ঘটে, তাহলে-1মানটি ফেরত দেয়া হবে এবং এরর বার্তা প্রদর্শিত হবে।subscribeমেথডে দুটি কলব্যাক (যেমনonNext,onError, এবংonComplete) ব্যবহার করা হয়েছে, তবে এখানে এরর ঘটবে বলেonErrorকলব্যাকটি কার্যকরী হবে।
onErrorResumeNext এর উদাহরণ
এখন একটি উদাহরণ দিচ্ছি যেখানে onErrorResumeNext অপারেশনটি ব্যবহার করা হয়েছে। এখানে যদি কোনো ত্রুটি ঘটে, তাহলে অন্য একটি Observable এর ডেটা ব্যবহার করা হবে।
import io.reactivex.rxjava3.core.Observable;
public class RxJavaOnErrorResumeNextExample {
public static void main(String[] args) {
// একটি Observable তৈরি করা হচ্ছে যা একটি ভুল (Exception) তৈরি করবে
Observable<Integer> numbers = Observable.create(emitter -> {
emitter.onNext(1);
emitter.onNext(2);
emitter.onError(new RuntimeException("Something went wrong!"));
});
// Error Handling with onErrorResumeNext
Observable<Integer> fallback = Observable.just(10, 20, 30);
numbers
.onErrorResumeNext(fallback) // এরর হলে fallback Observable চালু হবে
.subscribe(
item -> System.out.println("Item: " + item),
throwable -> System.out.println("Error: " + throwable),
() -> System.out.println("Completed!")
);
}
}
ব্যাখ্যা
numbersনামের একটিObservableপ্রথমে কিছু ভ্যালু পাঠায়, তারপর একটি ত্রুটি তৈরি করে।onErrorResumeNextব্যবহার করে, ত্রুটি ঘটলেfallbackনামের আরেকটিObservableচালু হবে, যা10, 20, 30পাঠাবে।subscribeমেথডে, এখন যদি কোনো ত্রুটি ঘটে, তাহলে প্রথমObservableএর পরিবর্তেfallbackObservableএর ডেটা ব্যবহার করা হবে।
উপসংহার
RxJava তে এরর হ্যান্ডলিং অত্যন্ত সহজ এবং শক্তিশালী। onError, onErrorReturn, এবং onErrorResumeNext অপারেশনগুলির মাধ্যমে আপনি আপনার অ্যাসিঙ্ক্রোনাস স্ট্রিমে এররগুলো সুন্দরভাবে হ্যান্ডল করতে পারেন। এগুলো ব্যবহারের মাধ্যমে আপনার কোডে স্থিতিশীলতা এবং ইউজার-ফ্রেন্ডলি অভিজ্ঞতা নিশ্চিত করা সম্ভব।
Read more